<?php
abstract class AbstractResult implements IResult {

    private $success = IResult::SUCESSO;
    private $errorTitle;
    private $errorMsg;
    private $numAffectedRows;
    private $results;
    private $arrayResult;
    private $showHeaderError = false;

    public function isSuccess() {
        return $this->success;
    }

    public function setSuccess($success) {
        $this->success = $success;
    }

    public function getShowHeaderError() {
        return $this->showHeaderError;
    }

    public function setShowHeaderError($showHeaderError) {
        $this->showHeaderError = $showHeaderError;
    }

    public function getErrorTitle() {
        return $this->errorTitle;
    }

    public function setErrorTitle($errorTitle) {
        $this->errorTitle = $errorTitle;
    }

    public function getErrorMsg() {
        return $this->errorMsg;
    }

    public function setErrorMsg($errorMsg) {
        $this->errorMsg = $errorMsg;
    }

    public function getNumRowsAffected() {
        return $this->numAffectedRows;
    }

    public function setNumRowsAffected($numAffectedRows) {
        $this->numAffectedRows = $numAffectedRows;
    }

    public function getResults() {
        return $this->results;
    }

    public function setResults($results) {
        $this->results = $results;
    }

    /**
     * Array Result é usado para arrays que não tem origem do banco de dados.
     * @author Tiago <tiago.professor@gmail.com>
     * @return array
     */
    public function getArrayResult() {
        return $this->arrayResult;
    }

    /**
     * Array Result é usado para arrays que não tem origem do banco de dados.
     * @author Tiago <tiago.professor@gmail.com>
     * @return array
     */
    public function setArrayResult($arrayResult) {
        $this->arrayResult = $arrayResult;
    }

    public function showResult() {
        header('Content-Type: application/json;charset=' . IResult::ENCODING);
        if (empty($this->arrayResult)) {
            if ($this->success == IResult::SUCESSO) {
                if (isset($this->numAffectedRows)) {
                    echo '{"success":'. IResult::SUCESSO . ',"numLinhas":' . $this->numAffectedRows . ',"linhas":';
                    echo json_encode($this->results) . '}';
                } else {
                    echo '{"success":'. IResult::SUCESSO . '}';
                }
            } else {
                if ($this->showHeaderError) {
                    header('HTTP/1.1 500 Internal Server Error');
                }
                echo '{"success":'. IResult::FALHA . ',';
                echo '"erros":{"title":"' . (strlen($this->errorTitle) != 0 ? $this->errorTitle : IResult::DEFAULT_TITLE_ERROR) . '",';
                echo '"erromsg":"' . (strlen($this->errorMsg) != 0 ? $this->errorMsg : IResult::DEFAULT_MSG_ERROR) . '"}}';
            }
        } else {
            echo '{"success":'. IResult::FALHA_VALIDACAO . ',';
            echo '"erros":[';
            $count = 0;
            foreach (array_keys($this->arrayResult) as $keyArrayResult) {
                if ($count++ > 0) {
                    echo ',';
                }
                echo '{"' . $keyArrayResult . '":"' . $this->arrayResult[$keyArrayResult] . '"}';
            }
            echo ']}';
        }
    }
}

?>
